Skip to content

fix(core): keep FileStore invites in the membership operation maps - #36

Merged
Mearman merged 1 commit into
mainfrom
fix/filestore-correctness
Sep 9, 2026
Merged

fix(core): keep FileStore invites in the membership operation maps#36
Mearman merged 1 commit into
mainfrom
fix/filestore-correctness

Conversation

@Mearman

@Mearman Mearman commented Sep 9, 2026

Copy link
Copy Markdown
Member

Fixes #35, fixes #32.

#35 — pending invites were wiped by any later join. PR #34 switched FileStore's joinRoom to re-derive the invited view from the per-agent operation maps but left inviteToRoom and declineInvite mutating the array directly, so a join re-derived invited from maps that never recorded those invites — every pending invitation vanished. Both sites now record their operations with a version bump, exactly as the MeshStore sites do.

#32 — unparseable records read as an empty mesh. listAgents returned [] for any error inside the read-and-parse loop, so a record written by an older build (missing the required version field) silently read as no agents at all. Only a missing registry directory is a legitimate empty list now; everything else propagates, per the fail-loudly convention. The default-the-field-to-1 migration alternative was rejected when #32 was filed and stays rejected.

The store also gains its first test coverage (wired into pnpm test): a pending invite survives an unrelated join, decline/kick clear the view consistently, re-invitation after a decline outranks the leave, joining through an invitation consumes it, unparseable records raise, and a fresh store lists no agents. Full suite 28 tests green, lint/typecheck/build clean.

inviteToRoom and declineInvite still mutated the invited array directly
after joinRoom switched to re-deriving the view from the per-agent
operation maps, so any later join re-derived invited from maps that
never recorded those invites and wiped every pending invitation. Record
the operations with a version bump as the MeshStore sites do, and cover
the store with tests: a pending invite survives an unrelated join,
decline and kick clear the view consistently, re-invitation after a
decline outranks the leave, and joining through an invitation consumes
it.

Also surface unparseable stored records instead of reading them as an
empty mesh: listAgents returned an empty list for any error inside the
read-and-parse loop, so a record written by an older build (missing the
required version field) silently read as no agents at all. Only a
missing registry directory is a legitimate empty list now.
@Mearman
Mearman marked this pull request as ready for review September 9, 2026 18:14
@Mearman
Mearman merged commit 74c6162 into main Sep 9, 2026
5 checks passed
@Mearman
Mearman deleted the fix/filestore-correctness branch September 9, 2026 18:14
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review Completed 2026-09-09T18:21:26.975243Z f94d45a Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 1.27.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

1 participant